package com.demo.enums;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

/**
 * @author wangfengchen
 */
public interface BaseEnum {

    String getCode();

    String getDesc();

    static <T extends BaseEnum> T getByCode(Class<T> enumClass, String code) {
        for (T enumConstant : enumClass.getEnumConstants()) {
            if (enumConstant.getCode().equals(code)) {
                return enumConstant;
            }
        }
        return null;
    }

    static <T extends BaseEnum> T getByDesc(Class<T> enumClass, String desc) {
        for (T enumConstant : enumClass.getEnumConstants()) {
            if (enumConstant.getDesc().equals(desc)) {
                return enumConstant;
            }
        }
        return null;
    }

    /**
     * 检查code是否有效
     */
    static <T extends BaseEnum> boolean isValid(Class<T> enumClass, String code) {
        return getByCode(enumClass, code) != null;
    }

    /**
     * 获取所有枚举的code列表
     */
    static <T extends BaseEnum> List<String> getCodes(Class<T> enumClass) {
        return Arrays.stream(enumClass.getEnumConstants())
                .map(BaseEnum::getCode)
                .collect(Collectors.toList());
    }


}